#ifdef DEBUG
#define ASSERT(exp)                                                     \
	do {                                                            \
	if (!(exp)) {                                                 \
	fprintf(stderr, "[ASSERT!][%s:%s:%d]: %s\n",                \
	__FILE__, __FUNCTION__, __LINE__, #exp);            \
	abort();                                                    \
	}                                                             \
	} while (0)
#define ERROR(...)                                                      \
		{                                                               \
		fprintf(stderr, "[ERROR  ][%s:%s:%d] ",                     \
		__FILE__, __FUNCTION__, __LINE__);                  \
		fprintf(stderr, __VA_ARGS__);                               \
		}
#define WARNING(...)                                                    \
		{                                                               \
		fprintf(stderr, "[WARNING][%s:%s:%d] ",                     \
		__FILE__, __FUNCTION__, __LINE__);                  \
		fprintf(stderr, __VA_ARGS__);                               \
		}
#define INFO(...)                                                       \
		{                                                               \
		fprintf(stdout, "[INFO   ][%s:%s:%d] ",                     \
		__FILE__, __FUNCTION__, __LINE__);                  \
		fprintf(stdout, __VA_ARGS__);                               \
		}
#else
#define ASSERT(exp)
#define ERROR(...)
#define WARNING(...)
#define INFO(...)
#define LOGTXT
#endif